#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
//void test(char **arr)
//{
//
//}
//int main()
//{
//	char* arr[5] = { "hello", "bit" };
//	test(arr);
//	return 0;
//}
//int main()
//{
//	int aa[2][5] = { 10,9,8,7,6,5,4,3,2,1 };
//	int* ptr1 = (int*)(&aa + 1);
//	int* ptr2 = (int*)(*(aa + 1));
//	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
//	return 0;
//}
//void print_arr(int(*arr)[5], int row, int col)
//{
//
//}
//int main()
//{
//	int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
//	print_arr(arr, 3, 5);
//	return 0;
//}
//int main()
//{
//	int a[5] = { 5, 4, 3, 2, 1 };
//	int* ptr = (int*)(&a + 1);
//	printf("%d,%d", *(a + 1), *(ptr - 1));
//	return 0;
//}
int compare_int(const void* a, const void* b)
{
	return (*(int*)a - *(int*)b);
}
int compare_char(const void* a, const void* b)
{
	return (*(char*)b - *(char*)a);
}
//int main()
//{
//	int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	qsort(arr, sz,sizeof(arr[0]), compare_int);
//	int i = 0;
//	for ( i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//	char arr2[] = "abcdefg";
//	int sz2 = sizeof(arr2) / sizeof(arr2[0]);
//	qsort(arr2, sz2, sizeof(arr2[0]), compare_char);
//	for (i = 0; i < sz2; i++)
//	{
//		printf("%c", arr2[i]);
//	}
//	return 0;
//}*(int*)p
void exchange(char *buf1, char *buf2,int size)
{
	int i = 0;
	int tmp = 0;
	for (i = 0; i < size; i++)
	{
		tmp = *buf1;
		*buf1 = *buf2;
		*buf2 = tmp;
		buf1++;
		buf2++;
	}
}
void my_qsort(void* arr, int num, int size, int(*cmp)(const void* , const void* ))
{
	int i = 0;
	int j = 0;
	int tmp = 0;
	for (i = 0; i < num-1; i++)
	{
		for (j = 0; j < num - 1 - i; j++)
		{
			if (cmp((char*)arr + j * size, (char*)arr + (j+1)*size)>0)
			{
				exchange((char*)arr + j * size, (char*)arr + (j + 1) * size, size);
			}
		}
	}
}
int main()
{
	int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	my_qsort(arr, sz, sizeof(arr[0]), compare_int);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	char arr2[] = "abcdefg";
	int sz2 = sizeof(arr2) / sizeof(arr2[0]);
	my_qsort(arr2, sz2, sizeof(arr2[0]), compare_char);
	for (i = 0; i < sz2; i++)
	{
		printf("%c", arr2[i]);
	}
	return 0;
}